package it.univaq.disim.mwt.business.impl;

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;

import it.univaq.disim.mwt.business.NoteDisciplinariService;
import it.univaq.disim.mwt.business.model.Alunno;
import it.univaq.disim.mwt.business.model.Insegnante;
import it.univaq.disim.mwt.business.model.NotaDisciplinare;
import it.univaq.disim.mwt.business.model.RegistroDiClasse;
import it.univaq.disim.mwt.business.model.TipologiaLaboratorio;
import it.univaq.disim.mwt.business.model.TipologiaNotaDisciplinare;

public class JDBCNotaDisciplinareService implements NoteDisciplinariService {

	//FUNZIONA
	@Override
	public NotaDisciplinare findNotaDisciplinareById(Long id) {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		String sql = "select * from note_disciplinari where id = ? ";
		NotaDisciplinare noteDisciplinari = null;
		
		try {
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.setLong(1, id);
			preparedStatement.executeQuery();	
            resultSet = preparedStatement.getResultSet();
            resultSet.next();
            
            Long ide = resultSet.getLong("id");
            Long idRegistro = resultSet.getLong("id_registro");
            Long idAlunno = resultSet.getLong("id_alunno");
            Long idInsegnante = resultSet.getLong("id_insegnante");
            String descrizione = resultSet.getString("descrizione");
            Date data = resultSet.getDate("data");
            Long id_tipologia = resultSet.getLong("id_tipologia");
            
            JDBCRegistroDiClasseService registroDiClasse = new JDBCRegistroDiClasseService();
            RegistroDiClasse registriDiClasse = registroDiClasse.findRegistroDiClasseByID(idRegistro);
            
            JDBCAlunnoService alunno = new JDBCAlunnoService();
            Alunno alunni = alunno.findAlunnoById(idAlunno);
            
            JDBCTipologiaNoteService tipoNote = new JDBCTipologiaNoteService();
            TipologiaNotaDisciplinare tipologiaNoteDisciplinari = tipoNote.findTipologiaNoteById(id_tipologia);
            
            JDBCInsegnanteService insegnante = new JDBCInsegnanteService();
            Insegnante insegnanti = insegnante.findInsegnanteById(idInsegnante);
            
            noteDisciplinari = new NotaDisciplinare(ide,registriDiClasse,alunni,insegnanti,descrizione,data,tipologiaNoteDisciplinari);
			
            resultSet.close();
			preparedStatement.close();
			connection.close();
			
			return noteDisciplinari;

		
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return null;
	}

	//FUNZIONA
	@Override
	public List<NotaDisciplinare> findAllNoteDisciplinari() {
		
		Connection connection = null;
		PreparedStatement preparedStatement = null;
		ResultSet resultSet = null;
		
		List<NotaDisciplinare> listNote = new ArrayList<NotaDisciplinare>();
		String sql = " select * from note_disciplinari ";
		NotaDisciplinare noteDisciplinari = null;
		
		try {
			connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:XE", "school", "school");
			preparedStatement = connection.prepareStatement(sql);
			preparedStatement.executeQuery();	
			resultSet = preparedStatement.getResultSet();
			
			while(resultSet.next()){
			
				Long ide = resultSet.getLong("id");
	            Long idRegistro = resultSet.getLong("id_registro");
	            Long idAlunno = resultSet.getLong("id_alunno");
	            Long idInsegnante = resultSet.getLong("id_insegnante");
	            String descrizione = resultSet.getString("descrizione");
	            Date data = resultSet.getDate("data");
	            Long id_tipologia = resultSet.getLong("id_tipologia");
	            
	            JDBCRegistroDiClasseService registroDiClasse = new JDBCRegistroDiClasseService();
	            RegistroDiClasse registriDiClasse = registroDiClasse.findRegistroDiClasseByID(idRegistro);
	            
	            JDBCAlunnoService alunno = new JDBCAlunnoService();
	            Alunno alunni = alunno.findAlunnoById(idAlunno);
	            
	            JDBCTipologiaNoteService tipoNote = new JDBCTipologiaNoteService();
	            TipologiaNotaDisciplinare tipologiaNoteDisciplinari = tipoNote.findTipologiaNoteById(id_tipologia);
	            
	            JDBCInsegnanteService insegnante = new JDBCInsegnanteService();
	            Insegnante insegnanti = insegnante.findInsegnanteById(idInsegnante);
	            
	            noteDisciplinari = new NotaDisciplinare(ide,registriDiClasse,alunni,insegnanti,descrizione,data,tipologiaNoteDisciplinari);
					
	            listNote.add(noteDisciplinari);
			}

			resultSet.close();
			preparedStatement.close();
			connection.close();
		
			return listNote;
			
		} catch (SQLException e) {
			
			e.printStackTrace();
		}
		return null;
	}
	
}